Recursive Queries হল SQL কুয়েরি যা নিজেই নিজেকে পুনরাবৃত্তি (recursion) করে, বিশেষত হায়ারার্কিক্যাল বা পারিবারিক সম্পর্কিত ডেটা অনুসন্ধান করতে। DB2-তে Recursive Queries সাধারণত Common Table Expressions (CTE) এর মাধ্যমে লেখা হয়। এই ধরনের কুয়েরি সাধারণত হায়ারার্কিক্যাল ডেটা, যেমন অর্গানাইজেশনাল চার্ট, পারিবারিক বৃক্ষ বা বিভিন্ন স্তরের ক্যাটেগরি ডেটা অনুসন্ধানে ব্যবহৃত হয়।
Recursive Query এর গঠন
DB2-তে Recursive Query তৈরি করার জন্য WITH RECURSIVE ক্লজ ব্যবহার করা হয়। একটি Recursive Query দুটি অংশে ভাগ হয়:
- Anchor Member: এটি প্রথম বা বেস কেস যা ডেটার প্রথম অংশকে নির্বাচন করে।
- Recursive Member: এটি পূর্ববর্তী নির্বাচিত ডেটা থেকে পরবর্তী পর্যায়ের ডেটা পুনরায় অনুসন্ধান করে।
সিনট্যাক্স:
WITH RECURSIVE <CTE_name> AS (
-- Anchor member
<initial_query>
UNION ALL
-- Recursive member
<recursive_query>
)
SELECT * FROM <CTE_name>;
এখানে:
- Anchor Member: মূল ডেটা নির্বাচন করে।
- Recursive Member: পূর্ববর্তী স্তরের ডেটার উপর ভিত্তি করে নতুন ডেটা পুনরাবৃত্তি করে।
Recursive Query উদাহরণ
ধরা যাক, একটি Employee টেবিল আছে যেখানে EmployeeID, ManagerID, এবং EmployeeName কলাম রয়েছে, এবং আমরা এই টেবিলের ভিত্তিতে একটি হায়ারার্কিক্যাল অর্গানাইজেশন চার্ট তৈরি করতে চাই।
Employee টেবিলের ডেটা:
| EmployeeID | EmployeeName | ManagerID |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
| 5 | Eve | 2 |
এই টেবিলের জন্য, আমরা Recursive Query ব্যবহার করে এমন একটি কুয়েরি তৈরি করব যা Alice (ম্যাংগার) থেকে শুরু করে পুরো হায়ারার্কি বের করবে।
Recursive Query উদাহরণ:
WITH RECURSIVE EmployeeHierarchy AS (
-- Anchor member: Select the root employee (Alice)
SELECT EmployeeID, EmployeeName, ManagerID
FROM Employee
WHERE EmployeeID = 1 -- Starting with Alice (EmployeeID 1)
UNION ALL
-- Recursive member: Select employees managed by the previous level
SELECT e.EmployeeID, e.EmployeeName, e.ManagerID
FROM Employee e
INNER JOIN EmployeeHierarchy eh
ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;
ফলাফল:
| EmployeeID | EmployeeName | ManagerID |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
| 5 | Eve | 2 |
এখানে:
- প্রথমে Anchor Member Alice কে নির্বাচন করা হয়েছে (EmployeeID 1)।
- এরপর Recursive Member ব্যবহার করে Bob এবং Charlie (যারা Alice এর অধীনে কাজ করেন) নির্বাচন করা হয়েছে, তারপর তাদের অধীনে কাজ করা David এবং Eve কে নির্বাচন করা হয়েছে।
Recursive Query এর গুরুত্বপূর্ণ বৈশিষ্ট্য
1. UNION ALL:
- UNION ALL ব্যবহার করে Recursive Query কে সম্পূর্ণ করা হয়। এটি একত্রিত ফলাফল তৈরি করে। তবে, UNION এর পরিবর্তে UNION ALL ব্যবহার করা হয় কারণ UNION অতিরিক্ত ডেটা ফিল্টারিং করবে, যা Recursive Query-তে অপ্টিমাইজেশন নষ্ট করতে পারে।
2. Recursion Limitation:
DB2-তে Default ভাবে একটি Recursive Query-তে 100 লেভেল (স্তর) পর্যন্ত ডেটা পুনরাবৃত্তি করা হয়। তবে, এটি পরিবর্তন করা যায়:
SET CURRENT RECURSION LIMIT 500;
3. Anchor and Recursive Members:
- Anchor Member সঠিকভাবে ডেটার প্রথম স্তর নির্ধারণ করে।
- Recursive Member পূর্ববর্তী স্তরের ডেটা অনুসরণ করে পরবর্তী স্তরের ডেটা নির্বাচন করে।
4. Performance Consideration:
- Recursive Query ব্যবহার করার সময় অতিরিক্ত স্তরের ডেটা পুনরাবৃত্তি হতে পারে, যা পারফরম্যান্সে প্রভাব ফেলতে পারে। সঠিক INDEXING এবং QUERY OPTIMIZATION প্রয়োগ করলে পারফরম্যান্স বৃদ্ধি পেতে পারে।
Recursive Query এর ব্যবহার
- অর্গানাইজেশন চার্ট: একটি কোম্পানির হায়ারার্কি (ম্যানেজার থেকে রিপোর্টিং স্টাফ পর্যন্ত) বের করতে।
- পারিবারিক বৃক্ষ: একটি বংশবৃদ্ধির সম্পর্ক বের করতে।
- ক্যাটেগরি হায়ারার্কি: প্রোডাক্ট বা সার্ভিস ক্যাটেগরি হায়ারার্কি বের করতে (যেমন, একাধিক স্তরের ক্যাটেগরি এবং সাবক্যাটেগরি)।
সারসংক্ষেপ
DB2-এ Recursive Queries ব্যবহার করা হয় বিশেষত যখন ডেটা হায়ারার্কিক্যাল বা পারিবারিক সম্পর্কিত থাকে। WITH RECURSIVE কুয়েরি স্টেটমেন্ট ব্যবহার করে, আপনি ডেটার বিভিন্ন স্তরের উপর ভিত্তি করে কুয়েরি করতে পারেন। এর মাধ্যমে অর্গানাইজেশন চার্ট, পারিবারিক বৃক্ষ বা ক্যাটেগরি হায়ারার্কির মতো ডেটা সহজে বের করা যায়। তবে, পারফরম্যান্স উন্নত করতে INDEXING এবং QUERY OPTIMIZATION অত্যন্ত গুরুত্বপূর্ণ।
Read more